﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SysContext;

namespace DataAccessLayer
{
    public class TimeRuleTable
    {
        SysDataContext Data = new SysDataContext(); 
        /// <summary>
        /// Thêm dữ liệu vào bảng TimeRule
        /// </summary>
        /// <param name="StartDate"></param>
        /// <param name="EndDate"></param>
        /// <param name="Repeadmode"></param>
        /// <param name="RepeadValues"></param>
        /// <param name="RepeadSeed"></param>
        public void InsertTimeRules(string StartDate, string EndDate, string Repeadmode, string RepeadValues, int RepeadSeed)
        {
            if (EndDate.Trim() == "")
            {
                EndDate = "1/1/2088";
            }
            Data.Insertimerule(StartDate, EndDate, Repeadmode, RepeadValues, RepeadSeed);
        }

        /// <summary>
        /// Lấy tất cả dữ liệu trong bảng TimeRule.
        /// </summary>
        /// <returns>Id,Start_Date,Enđ_Date,Repeat_Mode, Repeat_seed,Repeat_values</returns>
        public List<TimeRule> SelectTimeRule()
        {
            var p = (from i in Data.TimeRules
                     select i).ToList();
            return p.ToList();
        }
        /// <summary>
        /// Lấy Id lớn nhất trong bảng TimeRule.
        /// </summary>
        /// <returns>Id</returns>
        public double GetIDTimer()
        {            
            return Data.TimeRules.Max(p => p.Id);
        }

        /// <summary>
        /// Lấy tất cả các dữ liệu trong bảng TimeRule theo ngày bắt đầu nhỏ hơn ngày hiện tại 
        /// và ngày kết lúc lớn ngày hiện tại.
        /// </summary>
        /// <param name="Date"></param>
        /// <returns>Id,Star_Date,End_Date,,Repeat_Mode, Repeat_seed,Repeat_values</returns>
        public List<TimeRule> SelectTimer(DateTime Date)
        {
            var p = (from i in Data.TimeRules
                     where i.StartDate <Date && i.EndDate > Date
                     select i).ToList();
            return p.ToList();
        }      

        /// <summary>
        /// Lấy số lần lặp của ngày.
        /// </summary>
        /// <param name="ID"></param>
        /// <returns>RepeatSeed</returns>
        public double? GetRepeatseed(double ID)
        {
            TimeRule timerule = SelectTimeRule().SingleOrDefault(p => p.Id == ID);
            return timerule.RepeatSeed;
        }

        /// <summary>
        /// Lấy giá trị lặp của ngày hoặc tháng.
        /// </summary>
        /// <param name="ID"></param>
        /// <returns>RepeatMode</returns>
        public string GetRepeatMode(double ID)
        {           
            TimeRule timerule = SelectTimeRule().SingleOrDefault(p => p.Id == ID);
            return timerule.RepeatMode;
        }
        /// <summary>
        /// Lấy số ngày lặp lại trong tháng
        /// </summary>
        /// <param name="ID"></param>
        /// <returns></returns>
        public string GetRepeatValues(double ID)
        {
            TimeRule timerule = SelectTimeRule().SingleOrDefault(p => p.Id == ID);
            return timerule.RepeatValues;
        }
        /// <summary>
        /// Lấy ngày bắt đầu lịch nhắc trong bảng TimeRules
        /// </summary>
        /// <param name="ID"></param>
        /// <returns></returns>
        public DateTime GetStartDate(double ID)
        {
            TimeRule timerule = SelectTimeRule().SingleOrDefault(p => p.Id == ID);
            return timerule.StartDate;
        }
    }
}
